<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>基础面试题</title>
</head>
<style>
    * {
        line-height: 30px;
    }

    .flex {
        display: flex;
        flex-wrap: wrap;
        gap: 20px;
    }

    .flex>li {
        /* flex等分 */
        flex: 1;
        min-width: 250px;
    }

    /*  grid等分
    .flex{
        display:grid;
        grid-template-columns:repeat(fill-auto,minmax(250px,1fr))
    }
    */
</style>

<body>
    <h2>判断是否为一个数组</h2>
    判断是否为数组的方法：<br />
    <ul>
        <li>
            第一种：object.prototype.tostring.call(val) == "[object Array]" 缺陷 ES6出来后 是可以更改tostring方法 "symble.tostringTag":1111
        </li>
        <li>
            第二种：使用val instanceof Array 缺陷 也可以使用obj.setpepety(val,Array.setpeptey) 更改
        </li>
        <li>
            第三种：Array.isArray(val) 适配性是最好的判断是否为一个数组的方法，他判断的是数据结构 底层逻辑是用的C++代码 而代码是更改不了的
        </li>
    </ul>

    <!-- 对象在数组中是没有下标的 -->
    <h2>判断是否为一个稀疏数组</h2>
    <ul>
        <li>方法一: 可以用object.keys().length和arr.length的长度做对比 注意：前者的length会自动忽略调没有下标的元素 而后者会打印下标</li>
        <li>方法二：使用for循环判断数组中的的每一项有没有下标 使用方法为arr.hasOwnProperty(i) 有下标则true 没有则false</li>
    </ul>


    <h2>网站收录要求</h2>
    <ul>
        <li>用户体验<br />
            <ul>
                <li>用户在网站上的行为很有可能会被计入排名算法中</li>
            </ul>
        </li>
        <li>收录</li>
        <li>
            网络导航系统应该注意一下几点<br />
            <ul>
                <li>文字导航</li>
                <li>点击距离及扁平化</li>
                <Li>锚文字报告关键词 </Li>
                <li>面包屑导航</li>
                <LI>避免页脚堆积</LI>
            </ul>
        </li>
    </ul>

    <h2>proxy和propertry的区别</h2>
    <ul>
        <li>高级回答：proxy可以拦截所有的基本操作 definepropertry只是基本操作方法之一 阐述：definepropertry实现双向绑定的原理是在原型链上的拦截 一开始实例指向的就是元素的原型
            而defineproperty实在原型和实例的中间插入一些方法 比如push shift等一些方法 它是通过拦截这些方法来监听对象和数组或者是元素 而proxy就直接可以拦截原型 proxy可以拦截任何东西 比如长度
            下标 get set
        </li>
    </ul>

    <ul>
        <li>$(function(){}) === (function(){})()</li>
    </ul>

    <ul>
        <li>Object.defineProperty(对象，属性名，fn()属性值)是用来设置原型 object.setproperty应该也可以设置原型 因为都有一个property 注意：属性值被修改或被重新赋值会触发setter函数 也就是set 获得这个属性值会触发getter函数

            例如： var obj = {} obj.name = "json" //此时会触发setter  console.log(obj.name) //此时会触发getter
        </li>
    </ul>

    <h2>flex等分---换行</h2>
    <ul class="flex">
        <li>132456789563123456</li>
        <li>uniapppjfiodsajfkas jfklsaj</li>
        <li>uniapppjfiodsajfkas jfklsaj</li>
        <li>uniapppjfiodsajfkas jfklsaj</li>
    </ul>

    <ul>
        <li>object.prototype 这种方法只能对构造函数的实例使用 只有实例才有prototype这个属性 构造函数的this指向就是object.prototype这个原型</li>
    </ul>

    <ul>
        <li>new loader().set 个人解析：loader构造函数上命名了一个set属性 然后通过构造函数调用读取set这个属性</li>
        <li>loader.prototype 等于 new loader() 构造函数上的this 换言之 this指向就是该构造函数上的实例 实例 === 对象</li>
        <li>读取构造函数的实例：外部读取 new loader().get 内部读取：this.get；
            写入构造函数的实例：外部写入 loader.prototype.set  内部写入 this.set = set</li>
    </ul>

    <ul>
        <li>获取【对象】的原型：Object.getPrototypeOf()；
            写入【对象】的原型：Object.setPrototypeOf()</li>
    </ul>
</body>
</html>

new Vue({
    el:"#app",
    //必须是一个函数 保证组件之间的参数互不干扰
    data:()=>{
        return {
            //响应式更新数据 触发get函数
            uniapp:"你好呀"
        }
    }
    // 此方法里面主要写处理逻辑方法 this指向通常为data属性 此对象中方法命名不需要function 可以把methods当作一个class 类的构造函数
    methods:{
        click(){
            //响应式更新 其原理为 object.defineProperty(obj,"",{}) 发布订阅模式 触发set函数
            this.uniapp = "我很好 蟹蟹"
        }
    }
})


部署网站之后怎么通知客户刷新页面----> 通过websoket服务器发送消息给客户端刷新页面 （二）通过轮询 在打包环境里添加一个js文件 在js文件里面写轮询 大致结构就是 faches("/").then(res=>res.text()).then(res=>{
    if(res.response.data == beforeData)
    {
        //伪代码
        next()
    }else{
        //刷新页面
        let newdata = confrim("数据已更新，是否刷新页面");
        if(newdata)
        {
            //刷新页面
            location.onfresh()
        }
    }
})

aspx vue 文件都是通过编译一次之后在页面上运行的 而vue编译估计是通过webpack    而aspx 编译是C#  浏览器只会解析html文件 其他的需要编译之后再解析